package com.yuzhi.common.util;

/**
 * 海康视频流获取
 * <a href="https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=%E5%AF%B9%E6%8E%A5%E6%8C%87%E5%8D%97">...</a>
 *
 * @author llmoe
 * @date 2024/7/28 10:43
 * @since 1.0.0
 */
public class HikvisionUtil {

    /*private static final Logger logger = LoggerFactory.getLogger(HikvisionUtil.class);

    *//**
     * 能力开放平台的网站路径
     *//*
    private static final String ARTEMIS_PATH = "/artemis";

    *//**
     * 分页获取监控点资源
     * <a href="https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=API%E5%88%97%E8%A1%A8-%E8%A7%86%E9%A2%91%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1-%E8%A7%86%E9%A2%91%E8%B5%84%E6%BA%90#ef459f4b">...</a>
     *//*
    private static final String CAMERAS = "/api/resource/v1/cameras";

    *//**
     * 获取监控点预览取流URL(与maven版本关联，1.1.4是v2，1.1.3是v1)
     * <a href="https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=API%E5%88%97%E8%A1%A8-%E8%A7%86%E9%A2%91%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1-%E8%A7%86%E9%A2%91%E8%83%BD%E5%8A%9B">...</a>
     *//*
    private static final String PREVIEW_URLS = "/api/video/v1/cameras/previewURLs";

    *//**
     * 获取监控点回放取流URL
     * <a href="https://open.hikvision.com/docs/docId?productId=5c67f1e2f05948198c909700&version=%2Ff95e951cefc54578b523d1738f65f0a1&tagPath=API%E5%88%97%E8%A1%A8-%E8%A7%86%E9%A2%91%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1-%E8%A7%86%E9%A2%91%E8%83%BD%E5%8A%9B">...</a>
     *//*
    private static final String PLAYBACK_URLS = "/api/video/v2/cameras/playbackURLs";

    *//**
     * 请求类型
     *//*
    private static final String CONTENT_TYPE = "application/json";

    *//**
     * 成功返回码
     *//*
    private static final String SUCCESS = "0";


    *//**
     * 分页获取监控点资源
     *
     * @param appKey    访问密钥ID
     * @param appSecret 与访问密钥ID结合使用的密钥
     * @param host      平台门户/nginx的IP和端口(必须https)
     *//*
    public static JSONArray getCameras(String host, String appKey, String appSecret) {
        // 构建请求path
        Map<String, String> path = MapUtil.builder("https://", ARTEMIS_PATH + CAMERAS).build();

        ArtemisConfig artemisConfig = new ArtemisConfig();
        artemisConfig.setHost(host);
        artemisConfig.setAppKey(appKey);
        artemisConfig.setAppSecret(appSecret);

        JSONObject jsonBody = new JSONObject();
        jsonBody.set("pageSize", 10000);
        jsonBody.set("pageNo", 1);
        // 调用接口
        String result = "";//ArtemisHttpUtil.doPostStringArtemis(path, jsonBody.toString(), null, null, CONTENT_TYPE, null);
        // 获取返回结果
        JSONObject data = getData(result);
        return data.getJSONArray("list");
    }


    *//**
     * 校验结果并且获取data
     *
     * @param result 返回参数
     *//*
    private static JSONObject getData(String result) {
        // 获取返回结果
        JSONObject object = JSONUtil.parseObj(result);
        //返回码，0 – 成功，其他- 失败，参考附录E.1.1 视频应用错误码
        if (!SUCCESS.equals(object.getStr("code"))) {
            throw new RuntimeException("海康平台返回失败：" + object.getStr("msg"));
        }
        return object.getJSONObject("data");
    }


    *//**
     * 获取海康视频流URL(取流URL设有有效时间，有效时间为5分钟。)
     *
     * @param appKey          访问密钥ID
     * @param appSecret       与访问密钥ID结合使用的密钥
     * @param host            平台门户/nginx的IP和端口(必须https)
     * @param cameraIndexCode 监控点唯一标识，分页获取监控点资源接口获取返回参数cameraIndexCode
     *//*
    public static String getVideoPreviewUrl(String cameraIndexCode, String host, String appKey, String appSecret) {
        // 构建请求path
        Map<String, String> path = MapUtil.builder("https://", ARTEMIS_PATH + PREVIEW_URLS).build();

        JSONObject parameter = new JSONObject();
        // 监控点唯一标识
        parameter.set("cameraIndexCode", cameraIndexCode);
        // 码流类型，0:主码流 1:子码流 2:第三码流 参数不填，默认为主码流
        parameter.set("streamType", 0);
        // 取流协议（应用层协议）
        parameter.set("protocol", "hls");
        // 传输协议（传输层协议），0:UDP 1:TCP
        parameter.set("transmode", 1);
        // 输出码流转封装格式，“ps”:PS封装格式、“rtp”:RTP封装协议。当protocol=rtsp时生效，且不传值时默认为RTP封装协议。
//        parameter.set("streamform", "rtp");
        String body = parameter.toString();

        ArtemisConfig artemisConfig = new ArtemisConfig();
        artemisConfig.setHost(host);
        artemisConfig.setAppKey(appKey);
        artemisConfig.setAppSecret(appSecret);

        // String result = ArtemisHttpUtil.doPostStringArtemis(path, parameter.toString(), null, null, CONTENT_TYPE, null);

        String url = null;
        try {
            String result  = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,path,body,null,null,CONTENT_TYPE);
            logger.info("HikvisionUtil getVideoPreviewUrl, result={}", result);
            JSONObject info = getData(result);

            url =  info.getStr("url");

        } catch (Exception e) {
            logger.error("取海康视频流URL异常>>>>>",e);
        }

        return  url;
    }

    *//**
     * 获取监控点回放取流URL
     *
     * @param appKey          访问密钥ID
     * @param appSecret       与访问密钥ID结合使用的密钥
     * @param host            平台门户/nginx的IP和端口(必须https)
     * @param cameraIndexCode 监控点唯一标识，分页获取监控点资源接口获取返回参数cameraIndexCode
     **//*
    public static JSONObject getVideoHistoryUrl(String cameraIndexCode, String host, String appKey, String appSecret,
                                                String beginTime,//"2022-07-22T09:58:58.000+08:00"
                                                String endTime//"2022-07-22T10:00:00.000+08:00"
    ) {
        // 构建请求path
        Map<String, String> path = MapUtil.builder("https://", ARTEMIS_PATH + PLAYBACK_URLS).build();

        JSONObject parameter = new JSONObject();
        // 监控点唯一标识
        parameter.set("cameraIndexCode", cameraIndexCode);
        // 取流协议（应用层协议)
        parameter.set("protocol", "rtsp");
        //传输协议（传输层协议）0:UDP 1:TCP 默认为TCP，在protocol设置为rtsp或者rtmp时有效
        parameter.set("transmode", 1);
        // 查询录像的锁定类型，0-查询全部录像；1-查询未锁定录像；2-查询已锁定录像，不传默认值为0。
        parameter.set("lockType", 0);
        // 开始查询时间（IOS8601格式：yyyy-MM-dd’T’HH:mm:ss.SSSXXX）
        parameter.set("beginTime", beginTime);
        // 结束查询时间，开始时间和结束时间相差不超过三天；（IOS8601格式：yyyy-MM-dd’T’HH:mm:ss.SSSXXX）
        parameter.set("endTime", endTime);

        ArtemisConfig artemisConfig = new ArtemisConfig();
        artemisConfig.setHost(host);
        artemisConfig.setAppKey(appKey);
        artemisConfig.setAppSecret(appSecret);

        String result = "";//ArtemisHttpUtil.doPostStringArtemis(path, parameter.toString(), null, null, CONTENT_TYPE, null);

        return getData(result);
    }*/
}

